/*
 * @Author: 0x9DEFA478
 * @Date: 2023-02-22 20:01:20
 * @LastEditTime: 2023-03-08 21:59:24
 * @LastEditors: 0x9DEFA478
 * @Description: 
 * QQ:2652450237
 * ============================================================================================================================================
 * 
 * 
 * 
 *                                                                                               ************      ****************************
 *                                                                                             ************      ****************************  
 *                                                                                           ************      ****************************    
 *                                                                                         ************      ****************************      
 *                                                                                       ************      ************                        
 *                                                                                     ************      ************                          
 *                                                                                   ************      ************                            
 *                                                                                 ************      ************                              
 *                                                                               ************      ************                                
 *                                                                             ************      ************                                  
 *                                                                           ************      ************                                    
 *                                                                         ************      ************                                      
 *                                                                       ************      ************                                        
 *                                                                     ************      ************                                          
 *                                                                   ************      ************                                            
 *                                                                 ************      ************                                              
 *                                                               ************      ************                                                
 *                                                             ************      ************                                                  
 *                                                           ************      ************                                                    
 *                                                         ************      ************                                                      
 *                                                       ************      ************                                                        
 *                                                     ************      ************                                                          
 *                                                   ************      ************                                                            
 *                                                 ************      ************                                                              
 *                                               ************      ************                                                                
 *                                             ************      ************                                                                  
 *                                           ************      ************                                                                    
 *                                         ************      ************                                                                      
 *                                       ************      ************                                                                        
 *                                     ************      ************                                                                          
 *                                   ************      ************                                                                            
 *                                 ************      ************                                                                              
 *                               ************      ************                                                                                
 *                             ************      ************                                                                                  
 *                           ************      ************                                                                                    
 *                         ************      ************                                                                                      
 *       ****************************      ************                                                                                        
 *     ****************************      ************                                                                                          
 *   ****************************      ************                                                                                            
 * ****************************      ************                                                                                              
 * 
 * 
 * 
 * ============================================================================================================================================
 * 
 */
#include "PinInfo.h"
#include "FunctionInfo.h"




namespace PinAbstract{




bool PinInfo::SetFunctionIndex(PinInfo* pinInfo,int index){

  int functionSelectIndex;
  int i;
  int i_max;
  

  if(index<-1){
    return false;
  }
  if(index>=(int)pinInfo->functionObjects.size()){
    return false;
  }

  functionSelectIndex=pinInfo->functionSelectIndex;

  if(functionSelectIndex==index){
    return true;
  }

  if(functionSelectIndex>=0){
    FunctionInfo* func;
    func=pinInfo->GetFunctionByIndex(functionSelectIndex);
    if(func->GetPinInfoByIndex(func->PinIndex())->index!=pinInfo->index){
      return false;
    }
    pinInfo->GetFunctionByIndex(functionSelectIndex)->SetPinIndex(-1);//设置原引脚的功能为无引脚
  }

  pinInfo->SetFunctionIndex(index);//设置功能
  functionSelectIndex=index;

  if(functionSelectIndex>=0){
    index=pinInfo->GetFunctionByIndex(functionSelectIndex)->PinIndex();
    if(index>=0){
      pinInfo->GetFunctionByIndex(functionSelectIndex)->GetPinInfoByIndex(index)->SetFunctionIndex(-1);//设置将要设置的功能的引脚的功能为无功能
    }
    //查找要设置功能的引脚对应的索引
    i_max=pinInfo->GetFunctionByIndex(functionSelectIndex)->PinCount();
    for(i=0;i<i_max;i++){
      if(pinInfo->index==pinInfo->GetFunctionByIndex(functionSelectIndex)->GetPinInfoByIndex(i)->index){
        break;
      }
    }
    if(i<i_max){
      pinInfo->GetFunctionByIndex(functionSelectIndex)->SetPinIndex(i);//设置新功能的引脚
    }else{
      return false;
    }
  }

  return true;
}




PinInfo::PinInfo(int index,std::string& name){
  
  this->index=index;
  this->name=name;
  this->functionSelectIndex=-1;

}

PinInfo::~PinInfo(){
}

void PinInfo::SetFunctionIndex(int Index){
  functionSelectIndex=Index;
}

FunctionInfo* PinInfo::GetFunctionByIndex(int index){
  if(index>=(int)functionObjects.size()){
    return nullptr;
  }
  return functionObjects[index];
}

// FunctionInfo& PinInfo::operator[](int index){
//   return functionObjects[index][0];
// }




}



